package svc

import (
	"github.com/blog-zero/rpc/model/sysmodel"
	"github.com/blog-zero/rpc/sys/internal/config"
	"github.com/zeromicro/go-zero/core/stores/sqlx"
)

type ServiceContext struct {
	Config config.Config

	DictChildenModel sysmodel.SysDictChildenModel
	DictModel        sysmodel.SysDictModel
	JobModel         sysmodel.SysJobModel
	UserRoleModel    sysmodel.SysUserRoleModel
	MenuModel        sysmodel.SysMenuModel
	RoleMenuModel    sysmodel.SysRoleMenuModel
	DeptModel        sysmodel.SysDeptModel
	RoleModel        sysmodel.SysRoleModel
	UserModel        sysmodel.SysUserModel
	LoginLogModel    sysmodel.SysLoginLogModel
	SysLogModel      sysmodel.SysLogModel
}

func NewServiceContext(c config.Config) *ServiceContext {

	sqlConn := sqlx.NewMysql(c.Mysql.Datasource)

	return &ServiceContext{
		Config:           c,
		DictChildenModel: sysmodel.NewSysDictChildenModel(sqlConn),
		DictModel:        sysmodel.NewSysDictModel(sqlConn),
		JobModel:         sysmodel.NewSysJobModel(sqlConn),
		UserRoleModel:    sysmodel.NewSysUserRoleModel(sqlConn),
		MenuModel:        sysmodel.NewSysMenuModel(sqlConn),
		RoleMenuModel:    sysmodel.NewSysRoleMenuModel(sqlConn),
		DeptModel:        sysmodel.NewSysDeptModel(sqlConn),
		RoleModel:        sysmodel.NewSysRoleModel(sqlConn),
		UserModel:        sysmodel.NewSysUserModel(sqlConn),
		LoginLogModel:    sysmodel.NewSysLoginLogModel(sqlConn),
		SysLogModel:      sysmodel.NewSysLogModel(sqlConn),
	}
}
